package com.yf.ea;

/*
 栈上分配测试
 演示在栈上分配对象空间，避免GC

 jvm参数：
 开启逃逸分析，在栈上分配置内空存空间
 -Xms1G -Xmx1G -XX:+DoEscapeAnalysis -XX:+PrintGCDetails

 不开启逃逸分析，在堆上分配置内空存空间，未触发GC
 -Xms1G -Xmx1G -XX:-DoEscapeAnalysis -XX:+PrintGCDetails

 不开启逃逸分析，在堆上分配置内空存空间，触发GC
 -Xms128m -Xmx128m -XX:-DoEscapeAnalysis -XX:+PrintGCDetails
 */
public class StackAllocation {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();

        for (int i = 0; i < 10000000; i++) {
            alloc();
        }

        long end = System.currentTimeMillis();
        System.out.println("花费的时间为：" + (end - start) + " ms");

        try {
            Thread.sleep(1000000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private static void alloc() {
        User user = new User(); // 未发生逃逸
    }
}

class User {
}
